<?php
/**
 *  贷前申请准入提交
 *  param: params array()
 *
 *  return array(
 *      success: 提交是否成功
 *      reason_code: success为false的情况下对应错误码,调用失败时包含此字段。
 *      reason_desc: 错误详情描述，调用失败时包含此字段
 *      report_id: 贷前申请风险报告编号，调用成功时包含此字段。
 *  )
 */
function pre_loan_apply($type=1,$params){
    return td_invoke_service($type,'/preloan/apply/v5', 'POST', $params);
}


/**
 *  贷前申请准入报告查询
 *  param: report_id 准入申请时候得到的报告编号
 *
 *  return array(
 *       success: 提交是否成功
 *       reason_code: success为false的情况下对应错误码,调用失败时包含此字段。
 *       reason_desc: 错误详情描述，调用失败时包含此字段
 *       final_score: 风险分数
 *       final_decision: 风险结果
 *       report_id: 报告编号
 *       device_type: 设备类型,申请准入传入token_id或black_box时才有
 *       proxy_info: 代理信息,申请准入传入ip_address时才有，
 *       apply_time: 扫描时间,UNIX时间戳,毫秒级
 *       report_time: 报告时间,UNIX时间戳,毫秒级
 *       device_info: 设备环境信息,申请准入传入token_id或black_box时才有，
 *       geo_ip: 地理位置信息,申请准入传入ip_address时才有，
 *       geo_trueip: 真实地理位置信息,申请准入传入token_id或black_box时才有
 *       risk_items: 扫描出来的风险项
 *  )
 */
function pre_loan_report($type=1,$report_id){
    return td_invoke_service($type,'/preloan/report/v7', 'GET', array( "report_id"=>$report_id));
}


/**
 * $params 请求参数
 * $timeout 超时时间
 * $connection_timeout 连接超时时间
 */
function td_invoke_service($type,$path, $method, array $params, $timeout = 2000, $connection_timeout = 2000) {
    $options = td_build_options($type,$path, $method, $params, $timeout, $connection_timeout);
    $ch = curl_init();
    curl_setopt_array($ch, $options);
    $ret = NULL;
    if(!($response = curl_exec($ch))) {
        // 错误处理，按照同盾接口格式fake调用结果
        $ret = array(
            "success" => false,
            "reason_code" => "9".curl_errno($ch),
            "reason_desc" => "网络存在错误:[".curl_error($ch)."]"
        );
    }else{
        $ret = json_decode($response, true);
    }
    // $ret['info'] = curl_getinfo($ch);
    curl_close($ch);
    return $ret;
}

function td_build_options($type,$path, $method, $params, $timeout = 2000, $connection_timeout = 2000){
    $url = td_build_url($path,$type);

    $options = array(
        CURLOPT_RETURNTRANSFER => 1,  // 获取请求结果
        // -----------请确保启用以下两行配置------------
        CURLOPT_SSL_VERIFYPEER => 1,  // 验证证书
        CURLOPT_SSL_VERIFYHOST => 2,  // 验证主机名
    );
    if(strtoupper($method) == "POST"){
        $options[CURLOPT_POST] = 1;
        $options[CURLOPT_POSTFIELDS] = http_build_query($params);
    }else{
        $url .= '&'.http_build_query($params);
    }
    $options[CURLOPT_URL] = $url;

    if (defined(CURLOPT_TIMEOUT_MS)) {
        $options[CURLOPT_NOSIGNAL] = 1;
        $options[CURLOPT_TIMEOUT_MS] = $timeout;
    } else {
        $options[CURLOPT_TIMEOUT] = ceil($timeout / 1000);
    }

    if (defined(CURLOPT_CONNECTTIMEOUT_MS)) {
        $options[CURLOPT_CONNECTTIMEOUT_MS] = $connection_timeout;
    } else {
        $options[CURLOPT_CONNECTTIMEOUT] = ceil($connection_timeout / 1000);
    }

    return $options;
}

function td_build_url($path,$type){
    if(stripos($path, "/account") === 0){
        $url = 'api.tongdun.cn'.$path.'?'.TD_API_AUTH;
    }else{
        if($type==1){
//            partner_code=zjjyy&partner_key=fe774388d2e7404cb4cee26afc5906e8&app_name=zjjyy_ios
            $url = 'api.tongdun.cn'.$path.'?'."partner_code=zjjyy&partner_key=5de5eb39702543998658400eef7bc916&app_name=zjjyy_ios";
        }else{
            $url = 'api.tongdun.cn'.$path.'?'."partner_code=zjjyy&partner_key=5de5eb39702543998658400eef7bc916&app_name=zjjyy_and";
        }

    }
    return $url;
}
 // /*加密*/
 //    function encrypt($input){
 //        $key = "my.gcskeji.net/penngo?#@";
 //        $iv = "22481818";
 //        $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_CBC);//mcrypt_get_block_size — 获得加密算法的分组大小 MCRYPT_ciphername 常量中的一个，或者是字符串值的算法名称。MCRYPT_MODE_modename 常量中的一个，或以下字符串中的一个："ecb"，"cbc"，"cfb"，"ofb"，"nofb" 和 "stream"。
 //        $input = pkcs5_pad($input, $size);
 //        $key = str_pad($key,24,'0');//补齐24位
 //        $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');//打开算法和模式对应的模块 本函数打开指定算法和模式对应的模块。 算法名称可以是字符串，例如 "twofish"， 也可以是 MCRYPT_ciphername 常量。 调用 mcrypt_module_close() 函数可以关闭模块。  algorithm MCRYPT_ciphername 常量中的一个，或者是字符串值的算法名称。MCRYPT_MODE_modename 常量中的一个，或以下字符串中的一个："ecb"，"cbc"，"cfb"，"ofb"，"nofb" 和 "stream"。algorithm_directory 参数指示加密模式的位置。 如果你提供此参数，则使用你指定的值。 如果将此参数设置为空字符串（""），将使用 php.ini 中的 mcrypt.modes_dir 。 如果不指定此参数，则使用 libmcrypt 的编译路径 （通常是 /usr/local/lib/libmcrypt）。 

 //        if( $iv == '' )
 //        {
 //            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);//@屏蔽小报错  mcrypt_create_iv — 从随机源创建初始向量 初始向量只是为了给加密算法提供一个可用的种子， 所以它不需要安全保护， 你甚至可以随同密文一起发布初始向量也不会对安全性带来影响。  size 初始向量大小。 初始向量数据来源。可选值有： MCRYPT_RAND （系统随机数生成器）, MCRYPT_DEV_RANDOM （从 /dev/random 文件读取数据） 和 MCRYPT_DEV_URANDOM （从 /dev/urandom 文件读取数据）。 在 Windows 平台，PHP 5.3.0 之前的版本中，仅支持 MCRYPT_RAND。请注意，在 PHP 5.6.0 之前的版本中， 此参数的默认值为 MCRYPT_DEV_RANDOM。    Note: 需要注意的是，如果没有更多可用的用来产生随机数据的信息，那么 MCRYPT_DEV_RANDOM 可能进入阻塞状态。  

 //        }
 //        else
 //        {
 //            $iv = $iv;
 //        }
 //        @mcrypt_generic_init($td, $key, $iv);//— 初始化加密所需的缓冲区 在每次调用 mcrypt_generic() 或 mdecrypt_generic() 函数之前必须调用本函数。  td加密描述符。 key调用 mcrypt_enc_get_key_size() 函数获得的密钥最大长度。 小于最大长度的数值都被视为非法参数。 iv通常情况下，向量大小等于算法的分组大小， 但是你应该通过 mcrypt_enc_get_iv_size() 函数 来获得这个值。在 ECB 模式下，初始向量会被忽略， 在 CFB，CBC，STREAM，nOFB 和 OFB 模式下，必须提供初始向量。 初始向量要求是随机的，并且是唯一的（不需要是安全的）。 加密和解密必须使用相同的初始向量。 如果你不想使用初始向量，请将其设置为全 0 值，但是不建议你这么做。 返回值 如果发生错误，将会返回负数： -3 表示密钥长度有误，-4 表示内存分配失败， 其他值表示未知错误， 同时会显示对应的警告信息。 如果传入参数不正确，返回 FALSE。 



 //        $data = mcrypt_generic($td, $input);
 //        mcrypt_generic_deinit($td);
 //        mcrypt_module_close($td);
 //        $data = base64_encode($data);
 //        return $data;
 //    }
 //    /*解密*/
 //    function decrypt($encrypted){
 //        $key = "my.gcskeji.net/penngo?#@";
 //        $iv = "22481818";
 //        $encrypted = base64_decode($encrypted);
 //        $key = str_pad($key,24,'0');
 //        $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_CBC,'');
 //        if( $iv == '' )
 //        {
 //            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
 //        }
 //        else
 //        {
 //            $iv = $iv;
 //        }
 //        $ks = mcrypt_enc_get_key_size($td);
 //        @mcrypt_generic_init($td, $key, $iv);
 //        $decrypted = mdecrypt_generic($td, $encrypted);
 //        mcrypt_generic_deinit($td);
 //        mcrypt_module_close($td);
 //        $y=pkcs5_unpad($decrypted);
 //        return $y;
 //    }

 //    function pkcs5_pad ($text, $blocksize) {
 //        $pad = $blocksize - (strlen($text) % $blocksize);//strlen 返回字符串长度
 //        return $text . str_repeat(chr($pad), $pad);//str_repeat 把字符串重复*次 chr从不同的 ASCII 进制 值返回字符：
 //    }


 //    function pkcs5_unpad($text){
 //        $pad = ord($text{strlen($text)-1});
 //        if ($pad > strlen($text)) {
 //            return false;
 //        }
 //        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
 //            return false;
 //        }
 //        return substr($text, 0, -1 * $pad);
 //    }
 //    function PaddingPKCS7($data) {
 //        $block_size = mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
 //        $padding_char = $block_size - (strlen($data) % $block_size);
 //        $data .= str_repeat(chr($padding_char),$padding_char);
 //        return $data;
 //    }
  function sendsms($mobile,$verify,$model)
    {
        // import('ORG.Util.YTX');
        $V=new \Home\Service\YTX();
        $status=$V->sendTemplateSMS($mobile,$verify, $model);
        // print_r($status);die;
        if($status=='0') return 1;else return 0;
    }
/**
 * 攻城狮科技有限公司
 *
 * LICENSE
 *
 * 本代码来自于 攻城狮科技有限公司
 *
 * -----------------------------
 * 项目说明
 * -----------------------------
 * @xmlrpc_parse_method_descriptions 模型初始化，按需要加载所需要的资源
 * @package  	__MODELINI__
 * @copyright   copyright(c) 场地管家 Inc.
 * @author 		Ghupeng
 * @version 	V1.1.0
 * @date    	2016-03-14 13:45:02
 * @modify 		[function]。by:Ghupeng
 */
function build_orderno(){
    $time = explode(' ', microtime());
    $time2=substr($time['0'],'4','-2');
    return date('YmdHis',time()).$time2.rand(10000,99999);
}
/*
删除oss服务器上的多余图片
*/
function delossimg($object){
    $success = new \Home\Service\OSS\OssClient('7wDuicrZeSm3LidN','5NMNsAF0mT1xfU19e3gviuBI8YKQBP','http://tmwlimg.oss-cn-hangzhou.aliyuncs.com');
    $object = 'jinrong/'.$object;
    try {
        $success->deleteObject('tmwlimg',$object);
        return '1001';
    } catch (Exception $e) {
        return '1002';
    }
}
function curl($arr,$url){
    $post_data =$arr;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // post数据
    curl_setopt($ch, CURLOPT_POST, 1);
    // post的变量
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    $output = curl_exec($ch);
    curl_close($ch);
    //打印获得的数据
    return $output;
}
/*
上传到oss服务器上的图片
*/
function addossimg($image){
    $success = new \Home\Service\OSS\OssClient('7wDuicrZeSm3LidN','5NMNsAF0mT1xfU19e3gviuBI8YKQBP','http://tmwlimg.oss-cn-hangzhou.aliyuncs.com');
    $object = 'jinrong/'.$image;
    $filePath = './Picture/ed/'.$image;
    try {
        $success->uploadFile('tmwlimg',$object,$filePath);
        return '1001';
    } catch (Exception $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return '1002';
    }
}

function md5_code($username, $password, $code='133') {
	$decor = md5($code . $username . 'ios9');
	$mi    = md5($username . 'code' . $code . $password .'0577');
	return substr($decor ,0 ,15) . substr($mi, 3, 17);
}


/**
 * [get_images 图片处理]
 * @param  [type]  $images   [上传 file 名称]
 * @param  [type]  $savePath [图片保存路径]
 * @param  boolean $open     [是否开启FTP上传]  开启ftp上传 缩略图无法生成
 * @param  array   $thumb    [生成缩略图 数组为空不生成]
 * @return [type]            [description]
 * get_images('upload','./Public/upload/',false,$thumb=array('100','100'))   生成单缩略图100*100
 * get_images('upload','./Public/upload/',false,$thumb=array(array('100','100'),array('350','150')))   生成多缩略图
 */
function get_images($images,$savePath,$open=false,$thumb=array())
{
    $config = array(
        'maxSize' => 3145728,
        'rootPath' => $savePath,
        'savePath' => '',
        'saveName' => array('uniqid', ''),
        'exts' => array('jpg', 'gif', 'png', 'jpeg'),
        'autoSub' => false,
    );
    if ($open === true) {
        $upload = new \Think\Upload($config, 'Ftp', C('FTP_CONFING'));// 实例化上传类
    } else {
        $upload = new \Think\Upload($config);// 实例化上传类
    }

    // 上传文件
    $info = $upload->upload();
    if (!$info) {
        return $data = array('error' => $upload->getError());
    } else {

        /*******************************
         ***     缩略图操作
         *** ftp上传关闭，可执行缩略图操作,
         *** 否则无法生成。
         ********************************/
        if ($open === false) {
            if (count($thumb) !== 0) {
                $image = new \Think\Image();
                $image->open($savePath . $info[$images]['savename']);//打开图片
                if (!is_array($thumb['0'])) {
                    $width = intval($thumb['0']);      //宽
                    $height = intval($thumb['1']);      //高
                    $image->thumb($width, $height,\Think\Image::IMAGE_THUMB_FIXED)->save($savePath . $info[$images]['savename'] . "_" . $width . "x" . $height . "." . $info[$images]['ext']);                //生成缩略图
                } else {
                    foreach ($thumb as $key => $value) {
                        $width = intval($value['0']);  //宽
                        $height = intval($value['1']);  //高
                        $image->thumb($width, $height,\Think\Image::IMAGE_THUMB_FIXED)->save($savePath . $info[$images]['savename'] . "_" . $width . "x" . $height . "." . $info[$images]['ext']);    //生成缩略图
                    }
                }
            }
        }

        // 返回上传的保存文件名
        $data = array(
            'img' => $info[$images]['savename'],
            'ext' => $info[$images]['ext']
        );

        return $data;
    }
}

/**
 * [ftp_upload FTP图片上传]
 * @param  [type] $ftpPath   [上传路径文件]
 * @param  [type] $localPath [本机路径文件]
 * @return [type]            [description]
 */
// function ftp_upload($ftpPath,$localPath){
//     $ftp = new \Org\Util\Ftp(); //实例化对象
//     if($ftp->start(C('FTP_CONFING'))){
//         $ftp->put($ftpPath,$localPath);
//         unlink($localPath);
//         $ftp->close();//关闭ftp资源
//     }
// }

/**
 * [ 删除本地图片]
 * @param  [type] $images [图片名称]
 * @param  [type] $url    [删除路径]
 * @return [type]         [description]
 */
function deleteLocaImage($images,$url){
    if(!empty($images) && !empty($url)){
        if(file_exists($url . $images)){
             $filesnames = scandir($url);
             foreach ($filesnames as $key => $value) {
                preg_match('/' . $images . '.*/i' ,$value ,$arr);
                if( count($arr) !== 0 ){
                    if(!empty($arr['0'])){
                        unlink($url . $arr['0']);
                    }
                }
             }
            return array('success' => 200,'name' => $url.$images);
        }else{
            return false;
        }
    }

}
/**
 * [orderNumber 生成唯一订单号]
 * @return [type] [description]
 */
function orderNumber(){
    return date('ymdHis') . rand('10000','999999');
}

function get($url){
        $ch = curl_init();//初始化curl

        curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

        curl_setopt($ch, CURLOPT_HEADER,0);//设置header

        curl_setopt($ch, CURLOPT_TIMEOUT,10);

        $output = curl_exec($ch);

        curl_close($ch);

        return $output;
}

function post($url,$data){
        $ch = curl_init();//初始化curl

        curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页

        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

        curl_setopt($ch, CURLOPT_HEADER,1);//设置header

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //忽略证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //忽略证书

        curl_setopt($ch, CURLOPT_TIMEOUT,10);

        $output = curl_exec($ch);

        curl_close($ch);

        return $output;
}
function test($tel){
    $result = preg_match("/^1[34578]\d{9}$/", $tel);
    return $result;
}
function check_remote_file_exists($url) {
        $ch = curl_init();
        $timeout = 10;
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $contents = curl_exec($ch);
        if (preg_match("/404/", $contents)){
            return false;
        }
        return true;
}

/**
     * 简单对称加密算法之加密
     * @param String $string 需要加密的字串
     * @param String $skey 加密EKY
     * @author Anyon Zou <cxphp@qq.com>
     * @date 2013-08-13 19:30
     * @update 2014-01-21 28:28
     * @return String
     */
    function encode($string = '', $skey = 'cxphp') {
        $skey = str_split(base64_encode($skey));
        $strArr = str_split(base64_encode($string));
        $strCount = count($strArr);
        foreach ($skey as $key => $value) {
            $key < $strCount && $strArr[$key].=$value;
        }
        return str_replace('=', 'O0O0O', join('', $strArr));
    }
    /**
     * 简单对称加密算法之解密
     * @param String $string 需要解密的字串
     * @param String $skey 解密KEY
     * @author Anyon Zou <cxphp@qq.com>
     * @date 2013-08-13 19:30
     * @update 2014-01-21 28:28
     * @return String
     */
    function decode($string = '', $skey = 'cxphp') {
        $skey = str_split(base64_encode($skey));
        $strArr = str_split(str_replace('O0O0O', '=', $string), 2);
        $strCount = count($strArr);
        foreach ($skey as $key => $value) {
            $key < $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
        }
        return base64_decode(join('', $strArr));
    }

    /*计算月付款金额*/
    function rekon($a,$b,$c){//a本金b利率c期数
        $data = ($a*$b*pow(1+$b, $c))/(pow(1+$b, $c)-1);
        return sprintf("%1\$.2f",$data);
    }

    /*距离时间*/
    function stringtime($gettime){
        $data = ($gettime-strtotime(date('Y-m-d',time())))/(1*24*60*60);
        return $data;
        // if($data<'0'){
        //     return '1002';
        // }else{
        //     return $data;
        // }
        // if($data == '0'){
        //     return '今日是还款日期！';
        // }else if($data<'0'){
        //     return 1002;
        // }else{
        //     return '距还款日期还有'.$data.'天';
        // }
    }

    /*距离时间*/
    function string2time($gettime){
        $data = (strtotime(date('Y-m-d',time()))-$gettime)/(1*24*60*60);
        if($data == '0'){
            return '今日还款';
        }else if($data<'0'){
            return 1002;
        }else{
            return '最后还款'.$data.'天前';
        }
    }


    /*加密*/
    function encrypt($input){
        $key = "my.gcskeji.net/penngo?#@";
        $iv = "22481818";
        $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_CBC);
        $input = pkcs5_pad($input, $size);
        $key = str_pad($key,24,'0');
        $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
        if( $iv == '' )
        {
            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }
        else
        {
            $iv = $iv;
        }
        @mcrypt_generic_init($td, $key, $iv);
        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);
        return $data;
    }
    /*解密*/
    function decrypt($encrypted){
        $key = "my.gcskeji.net/penngo?#@";
        $iv = "22481818";
        $encrypted = base64_decode($encrypted);
        $key = str_pad($key,24,'0');
        $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_CBC,'');
        if( $iv == '' )
        {
            $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }
        else
        {
            $iv = $iv;
        }
        $ks = mcrypt_enc_get_key_size($td);
        @mcrypt_generic_init($td, $key, $iv);
        $decrypted = mdecrypt_generic($td, $encrypted);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $y=pkcs5_unpad($decrypted);
        return $y;
    }
    function pkcs5_pad ($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
    function pkcs5_unpad($text){
        $pad = ord($text{strlen($text)-1});
        if ($pad > strlen($text)) {
            return false;
        }
        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
            return false;
        }
        return substr($text, 0, -1 * $pad);
    }
    function PaddingPKCS7($data) {
        $block_size = mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
        $padding_char = $block_size - (strlen($data) % $block_size);
        $data .= str_repeat(chr($padding_char),$padding_char);
        return $data;
    }
    // function bankInfo($card,$bankList){
    //     $card_8 = substr($card, 0, 8);
    //     if (isset($bankList[$card_8])){
    //         return $bankList[$card_8];
    //     }
    //     $card_6 = substr($card, 0, 6);
    //     if (isset($bankList[$card_6])){
    //         return $bankList[$card_6];
    //     }
    //     $card_5 = substr($card, 0, 5);
    //     if (isset($bankList[$card_5])){
    //         return $bankList[$card_5];
    //     }
    //     $card_4 = substr($card, 0, 4);
    //     if (isset($bankList[$card_4])){
    //         return $bankList[$card_4];
    //     }
    // }
    /**---------------------------新的redis--------------------------------**/
 function newredisoperate($selectid)
    {
        $host = "5e9d7241470a4690.m.cnhza.kvstore.aliyuncs.com";
        $port = 6379;
        $user = "5e9d7241470a4690";
        $pwd = "gcsKJ0577";
        $redis=new Redis();
        $redis->connect($host, $port);
        $redis->auth($user . ":" . $pwd);
        $redis->select($selectid);
        return $redis;
    }

    //添加到hash表
    function newredisadd($selectid,$key,$field,$value)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->hSet($key, $field,$value))
        return true;
        else
        return false;
    }

    function newredishmset($selectid,$key,$value){
    header('Content-Type:text/html;charset=utf-8');
    $redis=newredisoperate($selectid);
    return $redis->hmset($key,$value)?true:false;
    }





    //获得一个哈希表中所有的 key 和 value
    function newredisgetall($selectid,$key)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        return $redis->hGetAll($key);
    }
    //更名
    function newredisrename($selectid,$key,$newname)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->RENAME($key,$newname))
        return true;
        else
        return false;

    }
    //获取哈希表的某指定key下字段的value
    function newredisget($selectid,$key,$field)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        return $redis->hGet($key,$field);
    }
    //给哈希表中某 key 增加一个整数值
    function newredishIncrBy($selectid,$key,$field,$incr)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->hIncrBy($key,$field,$incr))
        return true;
        else
        return false;
    }
    //添加排名
    function newzadds($selectid,$key,$score,$value)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->zadd($key, $score,$value))
        return true;
        else
        return false;
    }
    //paiming
    function newzrevranks($selectid,$key,$value)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        return $redis->zrevrank($key,$value);

    }
        //个数
    function newzsizes($selectid,$key)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        return $redis->zsize($key);

    }
        //给哈希表中某 key 增加一个浮点值
    function newredishfloatcrBy($selectid,$key,$field,$incr)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->hincrbyfloat($key,$field,$incr))
        return true;
        else
        return false;
    }
    //给哈希表中某 key 增加一个浮点数值
    function newredishIncrByFloat($selectid,$key,$field,$incrFloat)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->hIncrByFloat($selectid,$key,$field,$incrFloat))
        return true;
        else
        return false;
    }
    function newredisdelete($selectid,$key)
    {
        $redis=newredisoperate($selectid);
        $redis->del($key);
    }
    //是否存在key
    function newexists($selectid,$key)
    {
        $redis=newredisoperate($selectid);
        return $redis->exists($key);
    }

    function newkeys($selectid,$tiaojian)
    {
        $redis=newredisoperate($selectid);
        return $redis->keys($tiaojian);
    }
    //添加到string表
    function newredisstringadd($selectid,$key,$value)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        if($redis->set($key,$value))
        return true;
        else
        return false;
    }
    //du到string表
    function newredisstringget($selectid,$key)
    {
        header('Content-Type:text/html;charset=utf-8');
        $redis=newredisoperate($selectid);
        return $redis->get($key);

    }

    function getRandChar($length){
        $str = null;
        $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
        $max = strlen($strPol)-1;

        for($i=0;$i<$length;$i++){
            $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
        }

        return $str;
    }

//  短信接口
    function juhecurl($url,$params=false,$ispost=0){
        $httpInfo = array();
        $ch = curl_init();

        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 30 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 30);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }

/*********************************************新浪接口方法**********************************************/
    /**
    * getSignMsg 计算签名
    *
    * @param array $pay_params
    *          计算签名数据
    * @param string $sign_type
    *          签名类型
    * @return string $signMsg 返回密文
    */
    function getSignMsg($pay_params = array(), $sign_type,$_input_charset) {
        $params_str = "";
        $signMsg = "";
        foreach ( $pay_params as $key => $val ) {
            if ($key != "sign" && $key != "sign_type" && $key != "sign_version" && isset ( $val ) && @$val != "") {
                $params_str .= trim($key) . "=" . trim($val) . "&";
            }
        }
        $params_str = substr ( $params_str, 0, - 1 );
        //$params_str=mb_convert_encoding($params_str,$_input_charset);
        switch (@$sign_type) {
            case 'RSA' :
                self::write_log("RSA参与签名运算数据".$params_str);
                $priv_key = file_get_contents ( sinapay_rsa_sign_private_key );
                $pkeyid = openssl_pkey_get_private ( $priv_key );
                openssl_sign ( $params_str, $signMsg, $pkeyid, OPENSSL_ALGO_SHA1 );
                openssl_free_key ( $pkeyid );
                $signMsg = base64_encode ( $signMsg );
                self::write_log("RSA计算得出签名值：".$signMsg);
                break;
            case 'MD5' :
            default :
//          $params_str = $params_str . @sinapay_md5_key;
//          self::write_log("MD5参与签名运算数据".$params_str);
//          $signMsg = strtolower ( md5 ( $params_str ) );
//          self::write_log("MD5计算得出签名值：".$signMsg);
                break;
        }
        return $signMsg;
    }

    /**
    * 获取IP范例，具体以实现代码已自身网络架构来进行编写
    * @return string
    */
    function get_ip(){
        if (isset($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], "unknown")){
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], "unknown")){
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else if (isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        else if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        else{
            $ip = "";
        }
        return ($ip);
    }


    /**
     * [createcurl_data 拼接模拟提交数据]
     *
     * @param array $pay_params
     * @return string url格式字符
     */
    function createcurl_data($pay_params = array()) {
        $params_str = "";
        foreach ( $pay_params as $key => $val ) {
            if (isset ( $val ) && ! is_null ( $val ) && @$val != "") {
                $params_str .= "&" . trim($key) . "=" . urlencode ( urlencode ( trim ( $val ) ) );
            }
        }
        if ($params_str) {
            $params_str = substr ( $params_str, 1 );
        }
        return $params_str;
    }
    /**
     * 日志记录
     *
     * @param unknown $msg
     * @return boolean
     */
    function write_log($msg) {
        if(sinapay_debug_status){
            $result=error_log( date ( "[YmdHis]" ) ."\t" . $msg . "\r\n", 3, '../'. date ( "Ymd" ) . '.log' );
            return $result;
        }else
        {
            return false;
        }
    }
    /**
     * [curlPost 模拟表单提交]
     *
     * @param string $url  请求网关地址
     * @param string $data  请求数据key=value格式
     * @param $_input_charset 字符集编码
     * @return string $data
     */
    function curlPost($url, $data,$_input_charset) {
        self::write_log("请求sina网关地址".$url);
        self::write_log("请求sina网关数据".$data);
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, $url );
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
        curl_setopt(  $ch, CURLOPT_TIMEOUT,40);//单位S 秒
        $data = curl_exec ( $ch );
        curl_close ( $ch );
        self::write_log("请求新浪网关返回内容:".mb_convert_encoding(urldecode($data),"UTF-8"));
        //由于json转数组使用了json_decode所以需要将非UTF-8的内容强转为UTF-8字符集
        return urldecode($data);
        //mb_convert_encoding(urldecode($data),"UTF-8");
    }

    /**
     * checkSignMsg 回调签名验证
     *
     * @param array $pay_params 参与签名验证的数据
     * @param string $sign_type  签名类型
     * @param $_input_charset   签名字符集编码
     * @return boolean  签名结果
     */
    function checkSignMsg($pay_params = array(), $sign_type,$_input_charset) {
        $params_str = "";
        $signMsg = "";
        $return = false;
        foreach ( $pay_params as $key => $val ) {
            if ($key != "sign" && $key != "sign_type" && $key != "sign_version" && ! is_null ( $val ) && @$val != "") {
                $params_str .= "&" . trim($key) . "=" . trim($val);
            }
        }
        if ($params_str) {
            $params_str = substr ( $params_str, 1 );
        }
        //验证签名demo需要支持多字符集所以此处对字符编码进行转码处理,正常商户不存在多字符集问题
        //$params_str=mb_convert_encoding($params_str,$_input_charset,"UTF-8");
        $this->write_log("本地验证签名数据".$params_str);
        $this->write_log("本地获取签名".$pay_params ['sign']);
        switch (@$sign_type) {
            case 'RSA' :
                $cert = file_get_contents ( sinapay_rsa_sign_public_key );
                $pubkeyid = openssl_pkey_get_public ( $cert );
                $ok = openssl_verify ( $params_str, base64_decode ($pay_params ['sign']), $cert, OPENSSL_ALGO_SHA1 );
                $return = $ok == 1 ? true : false;
                openssl_free_key ( $pubkeyid );
                break;
            default :
                break;
        }
        return $return;
    }
// 获取当前位置ip
// function get_real_ip()
// {
//        $ip=false;
//        if(!empty($_SERVER["HTTP_CLIENT_IP"]))
//        {
//             $ip = $_SERVER["HTTP_CLIENT_IP"];
//        }
//        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
//        {
//             $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
//             if ($ip)
//             {
//                      array_unshift($ips, $ip); $ip = FALSE;
//             }
//             for ($i = 0; $i < count($ips); $i++)
//             {
//                      if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i]))
//                      {
//                                $ip = $ips[$i];
//                                break;
//                      }
//             }
//        }
//        return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
// }
//
 /**
 * 模拟post进行url请求
 * @param string $url
 * @param array $post_data
 */
// function request_post($url = '', $post_data = array()) {
//     if (empty($url) || empty($post_data)) {
//         return false;
//     }

//     $o = "";
//     foreach ($post_data as $k => $v ) {
//         $o.= "$k=" . urlencode( $v ). "&" ;
//     }
//     $post_data = substr($o,0,-1);
//     $postUrl = $url;
//     $curlPost = $post_data;
//     // var_dump($curlPost);die;
//     $ch = curl_init();//初始化curl
//     curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
//     curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
//     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
//     curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
//     curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
//     $data = curl_exec($ch);//运行curl
//     curl_close($ch);

//     return $data;
// }

function checklabel($vid,$label){
        switch ($label) {
            case 'PHONE_MODEL'://手机价格是否大于2000
                $phonemodel = M('user','',C('USER'))->where(array('vid'=>$vid))->getField('phonemodel');
                $phoneprice = _modelprice($user['phonemodel']);
                $tempmoney  = (int)($phoneprice/1000);
                if($tempmoney >= 2){
                    $this->addlabel($vid,'机型');
                }
                break;
            case 'MOBILE':
                $mobile_basicinfo = M('mobile_basicinfo','',C('ZHENGXIN'))->field('id,registerdata')->where(array('vid'=>$vid))->find();
                $partime = strtotime('- 2 years');
                if($mobile_basicinfo['registerdata'] < $partime){
                    $billaverage = M('mobile_bill','',C('ZHENGXIN'))->where(array('vid'=>$vid))->fetchSql(true)->avg('sumCost');
                    if($billaverage > 100){//每月消费是否大于100
                       addlabel($vid,'运营商');
                    }
                }
                break;
            case 'EDUCATION':
                addlabel($vid,'学历');
                break;
            case 'WORK':
                $worknum = M('user_work','',C('USER'))->where(array('vid'=>$vid))->getField('num');
                if($worknum >= 6){
                    addlabel($vid,'工作');
                }
                break;
            case 'XIAOBAI';
                $xiaobaicredit = M('jd_baitiaoinfo','',C('ZHENGXIN'))->where(array('vid'=>$vid))->getField('xiaoBaiCreditValue');
                if($xiaobaicredit > 80){
                    addlabel($vid,'小白信用');
                }
                break;
            case 'HUABEI':

                $huabeidetail = M('taobao_alipayinfo','',C('ZHENGXIN'))->field('huabeiLimit as a,huabeiAvailableLimit as b')->where(array('vid'=>$vid))->find();

                if(($huabeidetail["a"]/4)<$huabeidetail["b"]){
                    // var_dump($huabeidetail["a"]);echo 123;die;
                    addlabel($vid,'花呗');
                }
                break;
            case 'BAITIAO':
                $baitiaodetail = M('jd_baitiaoinfo','',C('ZHENGXIN'))->field('creditlimit,availablelimit')->where(array('vid'=>$vid))->find();
                if(($baitiaodetail['creditlimit']/4)<$baitiaodetail['availablelimit']){
                    addlabel($vid,'白条');
                }
                break;
        }
    }

    function addlabel($vid,$label){
        $alllabel = M('user','',C('USER'))->where(array('vid'=>$vid))->getField('machine_label');
        if(empty($alllabel)){
            $res = M('user','',C('USER'))->where(array('vid'=>$vid))->setField('machine_label',$label);
        }else{
            $alllabelarr  = explode(',',$alllabel);
            if(in_array($label,$alllabelarr)){
                return;
            }else{
                $alllabel = $alllabel.','.$label;
                $res = M('user','',C('USER'))->where(array('vid'=>$vid))->setField('machine_label',$alllabel);
            }

        }
        return $res;
    }

    function _modelprice($phone){
        // var_dump($phone);
        $phone = str_replace(' ','',$phone);
        $selectdata = M('mobile_model','','USER')->where(array('code'=>$phone,'is_zol'=>"1"))->field('is_zol,mobile')->find();
        if(!empty($selectdata)){//数据库查找到，并且代表中关村能查找到
            $phone = $selectdata['mobile'];
        }
        $phone = str_replace(' ','',$phone);
        $phone = str_replace('+','%2B',$phone);
        $url = 'http://search.zol.com.cn/s/all.php?kword='.$phone;
        $temp =[];
        $res = curl($temp,$url);
        preg_match("/<em>(.*?)</", $res, $matchs);
        $res = $matchs[1];
        $res = substr($res,2);
        $res = (int)$res;

        return $res;
    }

    /**
     * 身份证归属地
     * @param  [type] $id [description]
     * @return [type]     [description]
     */
    function get_address($array){
        $ch = curl_init();
        $url = 'http://apis.baidu.com/apistore/idservice/id?id='.$id;
        $header = array(
            'apikey: e3641a3d795b780ace62fa036faea364',
        );
// 添加apikey到header
        curl_setopt($ch, CURLOPT_HTTPHEADER  , $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
        curl_setopt($ch , CURLOPT_URL , $url);
        $res     = curl_exec($ch);
        $address =json_decode($res);
        $mycity  =$address->retData->address;
        $city    =mb_strpos($mycity,'市');
        if($city===false){
                $xian=mb_strpos($mycity,'县');
                if($xian===false){
                    $qu=mb_strpos($mycity,'区');
                    if($qu===false){
                        $cun=mb_strpos($mycity,'村');
                        if($cun===false){
                            $province=mb_strpos($mycity,'省');
                            $position=mb_substr($mycity,0,($province/3+1),'utf-8');
                        }else{
                            $position=mb_substr($mycity,0,($cun/3+1),'utf-8');
                        }
                    }else{
                        $position=mb_substr($mycity,0,($qu/3+1),'utf-8');
                    }
                }else{
                    $position=mb_substr($mycity,0,($xian/3+1),'utf-8');
                }
        }else{
            $position=mb_substr($mycity,0,($city/3+1),'utf-8');
        }
        return $position;
    }

     function get_address2($id){
        $ch = curl_init();
        $url = 'http://apis.baidu.com/apistore/idservice/id?id='.$id;
        $header = array(
            'apikey: e3641a3d795b780ace62fa036faea364',
        );
// 添加apikey到header
        curl_setopt($ch, CURLOPT_HTTPHEADER  , $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
        curl_setopt($ch , CURLOPT_URL , $url);
        $res = curl_exec($ch);
        $address=json_decode($res);
        $mycity=$address->retData->address;
        if(mb_strpos($mycity,'内蒙古自治区')!==false){
            $position='内蒙古自治区';
        }elseif(mb_strpos($mycity,'新疆维吾尔自治区')!==false){
            $position='新疆维吾尔自治区';
        }elseif(mb_strpos($mycity,'广西壮族自治区')!==false){
            $position='广西壮族自治区';
        }elseif(mb_strpos($mycity,'宁夏回族自治区')!==false){
            $position='宁夏回族自治区';
        }elseif(mb_strpos($mycity,'西藏自治区')!==false){
            $position='西藏自治区';
        }else{
            $province=mb_strpos($mycity,'省');
            if($province===false){
                $city=mb_strpos($mycity,'市');
                if($city===false){
                    $qu=mb_strpos($mycity,'区');
                    $position=mb_substr($mycity,0,($qu/3+1),'utf-8');
                }else{
                    $position=mb_substr($mycity,0,($city/3+1),'utf-8');
                }
            }else{
                $position=mb_substr($mycity,0,($province/3+1),'utf-8');
            }
        }

        return $position;
    }

    function bankInfo($card,$bankList){
        $card_8 = substr($card, 0, 8);
        if (isset($bankList[$card_8])){
            return $bankList[$card_8];
        }
        $card_6 = substr($card, 0, 6);
        if (isset($bankList[$card_6])){
            return $bankList[$card_6];
        }
        $card_5 = substr($card, 0, 5);
        if (isset($bankList[$card_5])){
            return $bankList[$card_5];
        }
        $card_4 = substr($card, 0, 4);
        if (isset($bankList[$card_4])){
            return $bankList[$card_4];
        }
    }
    /*银行卡判定*/
    function bank_class($accountNo){
        $bank=new \Home\Service\bank();
        $bankdata=bankInfo($accountNo,$bank->banklist());


        $bankarray=explode("-",$bankdata);
        $data['bankname']=$bankarray[0];
        $data['cardsname'] = $bankarray[1];
        $data['banktype']=$bankarray[2];
        return $data;
    }

    //身份证归属地
    function idcardaddress($idcard){
        $address = array();
        $list = new \Home\Service\Idcardaddress();
        $address['shenfen'] = $list->get_shenfen($idcard);
        $address['city'] = $list->get_addr($idcard);
        return $address;
    }
    /**
 * 模拟post进行url请求
 * @param string $url
 * @param array $post_data
 */
    function request_post($url = '', $post_data = array()) {
        if (empty($url) || empty($post_data)) {
            return false;
        }

        // $o = "";
        // foreach ($post_data as $k => $v ) {
        //     $o.= "$k=" . urlencode( $v ). "&" ;
        // }
        // $post_data = substr($o,0,-1);
        $postUrl = $url;
        $curlPost = $post_data;
        //var_dump($curlPost);die;
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $data = curl_exec($ch);//运行curl
        curl_close($ch);

        return $data;
    }